package io.gitee.caoxiaoyu97.messageconvert.common;

import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.TemplateExceptionHandler;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/*********************************************************
 * 文件名称：ConfigurationUtil.java
 * 系统名称：CXY自定义系统
 * 模块名称：io.gitee.caoxiaoyu97.messageconvert.common
 * 功能说明：
 * 开发人员 @author：caoxy31978
 * 开发时间 @date：2023/7/7 10:37
 * 修改记录：程序版本  修改日期  修改人员  修改单号  修改说明
 *********************************************************/
public class CxyCloudTempConfigurationUtil {
    private static volatile Map<String,Configuration> cfgMap = new ConcurrentHashMap();
    public static Configuration getConfiguration(String group) {
        return cfgMap.get(group);
    }

    /**
     * 根据组名和模板信息新增一个模板配置
     * @param group
     * @param metadataList
     */
    public static void addConfiguration(String group,List<? extends CxyCloudTemplateMetadata> metadataList){
        StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
        for (CxyCloudTemplateMetadata metadata : metadataList) {
            stringTemplateLoader.putTemplate(metadata.getReqTempName(),metadata.getReqTemp());
            stringTemplateLoader.putTemplate(metadata.getRespTempName(),metadata.getRespTemp());
            stringTemplateLoader.putTemplate(metadata.getMockTempName(),metadata.getMockTemp());
        }
        Configuration cfgTemp = new Configuration(Configuration.VERSION_2_3_32);
        cfgTemp.setDefaultEncoding("UTF-8");
        cfgTemp.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        cfgTemp.setTemplateLoader(stringTemplateLoader);
        cfgMap.put(group,cfgTemp);
    }
    public static void updateTemp(CxyCloudTemplateMetadata serviceMetadata){
        Configuration configuration = getConfiguration(serviceMetadata.getTempGroup());
        StringTemplateLoader stringTemplateLoader = (StringTemplateLoader) configuration.getTemplateLoader();
        stringTemplateLoader.putTemplate(serviceMetadata.getReqTempName(),serviceMetadata.getReqTemp());
        stringTemplateLoader.putTemplate(serviceMetadata.getRespTempName(),serviceMetadata.getRespTemp());
        stringTemplateLoader.putTemplate(serviceMetadata.getMockTempName(),serviceMetadata.getMockTemp());
        configuration.clearTemplateCache();
    }
}
